import { get, post, put, del } from '~/utils/request';
import type {
  IPaginationResponse,
  IRole,
  ICreateRole,
  IUpdateRole,
  IQueryRole,
  IAssignPermissions,
  IAssignUsers
} from '@nbase/shared';

/**
 * 角色信息
 */
export type Role = IRole;

/**
 * 创建角色请求参数
 */
export type CreateRoleDto = ICreateRole;

/**
 * 更新角色请求参数
 */
export type UpdateRoleDto = IUpdateRole;

/**
 * 查询角色请求参数
 */
export type QueryRoleDto = IQueryRole;

/**
 * 分配权限请求参数
 */
export type AssignPermissionsDto = IAssignPermissions;

/**
 * 分配用户请求参数
 */
export type AssignUsersDto = IAssignUsers;

/**
 * 角色服务
 */
export const roleService = {
  /**
   * 获取角色列表
   */
  getList(params?: QueryRoleDto): Promise<IPaginationResponse<Role>> {
    return get('/system/role', { params });
  },

  /**
   * 获取所有角色（不分页）
   */
  getAll(): Promise<Role[]> {
    return get('/system/role');
  },

  /**
   * 获取角色详情
   */
  getById(id: string): Promise<Role> {
    return get(`/system/role/${id}`);
  },

  /**
   * 创建角色
   */
  create(data: CreateRoleDto): Promise<Role> {
    return post('/system/role', data);
  },

  /**
   * 更新角色
   */
  update(id: string, data: UpdateRoleDto): Promise<Role> {
    return put(`/system/role/${id}`, data);
  },

  /**
   * 删除角色
   */
  delete(id: string): Promise<{ message: string }> {
    return del(`/system/role/${id}`);
  },

  /**
   * 分配权限
   */
  assignPermissions(id: string, data: AssignPermissionsDto): Promise<{ message: string }> {
    return post(`/system/role/${id}/permissions`, data);
  },

  /**
   * 获取角色的权限
   */
  getPermissions(id: string): Promise<string[]> {
    return get(`/system/role/${id}/permissions`);
  },

  /**
   * 分配用户
   */
  assignUsers(id: string, data: AssignUsersDto): Promise<{ message: string }> {
    return post(`/system/role/${id}/users`, data);
  },

  /**
   * 获取角色的用户
   */
  getUsers(id: string): Promise<string[]> {
    return get(`/system/role/${id}/users`);
  },
};

